Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / tests / frontend / MicronWasmLoader.test.js

Displaying Raw • Download


tests/frontend/MicronWasmLoader.test.js bce42bcdce0e7d2c6d78228e864a4cd1d974cc82 (bce42bcd) Text, 10.66 KB

Tff7b72import Tb4b4b4{ Te6edf3afterEachTb4b4b4, Te6edf3beforeEachTb4b4b4, Te6edf3describeTb4b4b4, Te6edf3expectTb4b4b4, Te6edf3itTb4b4b4, Te6edf3vi Tb4b4b4} Tff7b72from Ta5d6ff"vitest"Tb4b4b4;
Tff7b72import Tb4b4b4{
Te6edf3invalidateNomadMicronWasmPreloadTb4b4b4,
Te6edf3isMicronWasmBundledTb4b4b4,
Te6edf3preloadNomadMicronWasmTb4b4b4,
Tb4b4b4} Tff7b72from Ta5d6ff"../../meshchatx/src/frontend/js/MicronWasmLoader.js"Tb4b4b4;

Tff7b72function Te6edf3micronTestSriForBufferTb4b4b4(Te6edf3bufTb4b4b4, Te6edf3mockExecHashB64Tb4b4b4, Te6edf3mockWasmHashB64Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3hashPayloadB64 Tff7b72= Te6edf3bufTb4b4b4.Te6edf3byteLength Tff7b72< T79c0ff1000 Tff7b72? Te6edf3mockExecHashB64 Tff7b72: Te6edf3mockWasmHashB64Tb4b4b4;
Tff7b72const Te6edf3binary Tff7b72= Te6edf3atobTb4b4b4(Te6edf3hashPayloadB64Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3bytes Tff7b72= Tff7b72new Tffa657Uint8ArrayTb4b4b4(Te6edf3binaryTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3binaryTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Te6edf3bytesTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3binaryTb4b4b4.Te6edf3charCodeAtTb4b4b4(Te6edf3iTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Ta5d6ff`Ta5d6ffsha384-Tffd700${Te6edf3btoaTb4b4b4(Tffa657StringTb4b4b4.Te6edf3fromCharCodeTb4b4b4(Tb4b4b4...Te6edf3bytesTb4b4b4)Tb4b4b4)Tffd700}Ta5d6ff`Tb4b4b4;
Tb4b4b4}

Tff7b72function Te6edf3mockMicronWasmFetchTb4b4b4(Te6edf3mockExecHashTb4b4b4, Te6edf3mockWasmHashTb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4(Te6edf3urlTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3u Tff7b72= Tffa657StringTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3uTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"integrity.json"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3wasmSri Tff7b72= Te6edf3micronTestSriForBufferTb4b4b4(Tff7b72new Tffa657ArrayBufferTb4b4b4(T79c0ff4096Tb4b4b4)Tb4b4b4, Te6edf3mockExecHashTb4b4b4, Te6edf3mockWasmHashTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3execSri Tff7b72= Te6edf3micronTestSriForBufferTb4b4b4(Tff7b72new Tffa657ArrayBufferTb4b4b4(T79c0ff500Tb4b4b4)Tb4b4b4, Te6edf3mockExecHashTb4b4b4, Te6edf3mockWasmHashTb4b4b4)Tb4b4b4;
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{
Te6edf3okTff7b72: Tff7b72trueTb4b4b4,
Te6edf3jsonTff7b72: Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{ Te6edf3wasmTff7b72: Te6edf3wasmSriTb4b4b4, Te6edf3wasmExecTff7b72: Te6edf3execSri Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3isWasm Tff7b72= Te6edf3uTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff".wasm"Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{
Te6edf3okTff7b72: Tff7b72trueTb4b4b4,
Te6edf3arrayBufferTff7b72: Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Te6edf3isWasm Tff7b72? Tff7b72new Tffa657ArrayBufferTb4b4b4(T79c0ff4096Tb4b4b4) Tff7b72: Tff7b72new Tffa657ArrayBufferTb4b4b4(T79c0ff500Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3headersTff7b72: Tff7b72new Te6edf3HeadersTb4b4b4(Tb4b4b4{ Ta5d6ff"content-type"Tff7b72: Te6edf3isWasm Tff7b72? Ta5d6ff"application/wasm" Tff7b72: Ta5d6ff"application/javascript" Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Tb4b4b4}

Te6edf3describeTb4b4b4(Ta5d6ff"MicronWasmLoader.js"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72let Te6edf3origBundledFlagTb4b4b4;

Te6edf3beforeEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3origBundledFlag Tff7b72= Tffa657globalThisTb4b4b4.Te6edf3__MESHCHATX_TEST_MICRON_WASM_BUNDLED__Tb4b4b4;
Te6edf3invalidateNomadMicronWasmPreloadTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72delete Tffa657globalThisTb4b4b4.Te6edf3micronConvertTb4b4b4;
Tff7b72delete Tffa657globalThisTb4b4b4.Te6edf3GoTb4b4b4;
Tffa657documentTb4b4b4.Te6edf3getElementByIdTb4b4b4(Ta5d6ff"meshchatx-micron-wasm-exec"Tb4b4b4)Tff7b72?Tb4b4b4.Te6edf3removeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3afterEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3invalidateNomadMicronWasmPreloadTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72delete Tffa657globalThisTb4b4b4.Te6edf3micronConvertTb4b4b4;
Tff7b72delete Tffa657globalThisTb4b4b4.Te6edf3GoTb4b4b4;
Tffa657documentTb4b4b4.Te6edf3getElementByIdTb4b4b4(Ta5d6ff"meshchatx-micron-wasm-exec"Tb4b4b4)Tff7b72?Tb4b4b4.Te6edf3removeTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3viTb4b4b4.Te6edf3restoreAllMocksTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3viTb4b4b4.Te6edf3unstubAllGlobalsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3origBundledFlag Tff7b72=== Tff7b72undefinedTb4b4b4) Tb4b4b4{
Tff7b72delete Tffa657globalThisTb4b4b4.Te6edf3__MESHCHATX_TEST_MICRON_WASM_BUNDLED__Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tffa657globalThisTb4b4b4.Te6edf3__MESHCHATX_TEST_MICRON_WASM_BUNDLED__ Tff7b72= Te6edf3origBundledFlagTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"isMicronWasmBundled honors __MESHCHATX_TEST_MICRON_WASM_BUNDLED__"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tffa657globalThisTb4b4b4.Te6edf3__MESHCHATX_TEST_MICRON_WASM_BUNDLED__ Tff7b72= Tff7b72trueTb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3isMicronWasmBundledTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tffa657globalThisTb4b4b4.Te6edf3__MESHCHATX_TEST_MICRON_WASM_BUNDLED__ Tff7b72= Tff7b72falseTb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3isMicronWasmBundledTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"preloadNomadMicronWasm resolves false without bundling and does not fetch"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tffa657globalThisTb4b4b4.Te6edf3__MESHCHATX_TEST_MICRON_WASM_BUNDLED__ Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72const Te6edf3fetchSpy Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Tffa657globalThisTb4b4b4, Ta5d6ff"fetch"Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tff7b72new Te6edf3ResponseTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3ok Tff7b72= Tff7b72await Te6edf3preloadNomadMicronWasmTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3okTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3fetchSpyTb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"preloadNomadMicronWasm resolves false when WebAssembly is unavailable"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tffa657globalThisTb4b4b4.Te6edf3__MESHCHATX_TEST_MICRON_WASM_BUNDLED__ Tff7b72= Tff7b72trueTb4b4b4;
Te6edf3viTb4b4b4.Te6edf3stubGlobalTb4b4b4(Ta5d6ff"WebAssembly"Tb4b4b4, Tff7b72undefinedTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3ok Tff7b72= Tff7b72await Te6edf3preloadNomadMicronWasmTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3okTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"preloadNomadMicronWasm resolves false when wasm_exec script fails to load"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tffa657globalThisTb4b4b4.Te6edf3__MESHCHATX_TEST_MICRON_WASM_BUNDLED__ Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72const Te6edf3appendSpy Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Tffa657documentTb4b4b4.Te6edf3headTb4b4b4, Ta5d6ff"appendChild"Tb4b4b4)Tb4b4b4.Te6edf3mockImplementationTb4b4b4(Tb4b4b4(Te6edf3nodeTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3nodeTff7b72?Tb4b4b4.Te6edf3tagName Tff7b72=== Ta5d6ff"SCRIPT" Tff7b72&& Tff7b72typeof Te6edf3nodeTb4b4b4.Te6edf3onerror Tff7b72=== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Te6edf3queueMicrotaskTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3nodeTb4b4b4.Te6edf3onerrorTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3nodeTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3ok Tff7b72= Tff7b72await Te6edf3preloadNomadMicronWasmTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3okTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Te6edf3appendSpyTb4b4b4.Te6edf3mockRestoreTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"preloadNomadMicronWasm resolves false when wasm_exec loads but Go is missing"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tffa657globalThisTb4b4b4.Te6edf3__MESHCHATX_TEST_MICRON_WASM_BUNDLED__ Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72const Te6edf3appendSpy Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Tffa657documentTb4b4b4.Te6edf3headTb4b4b4, Ta5d6ff"appendChild"Tb4b4b4)Tb4b4b4.Te6edf3mockImplementationTb4b4b4(Tb4b4b4(Te6edf3nodeTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3nodeTff7b72?Tb4b4b4.Te6edf3tagName Tff7b72=== Ta5d6ff"SCRIPT" Tff7b72&& Tff7b72typeof Te6edf3nodeTb4b4b4.Te6edf3onload Tff7b72=== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Te6edf3queueMicrotaskTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3nodeTb4b4b4.Te6edf3onloadTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3nodeTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3ok Tff7b72= Tff7b72await Te6edf3preloadNomadMicronWasmTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3okTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Te6edf3appendSpyTb4b4b4.Te6edf3mockRestoreTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"preloadNomadMicronWasm resolves false when WASM instantiation fails"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tffa657globalThisTb4b4b4.Te6edf3__MESHCHATX_TEST_MICRON_WASM_BUNDLED__ Tff7b72= Tff7b72trueTb4b4b4;
Tffa657globalThisTb4b4b4.Te6edf3Go Tff7b72= Tff7b72class Tb4b4b4{
Tff7b72constructorTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3importObject Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3run Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4;

Tff7b72const Te6edf3appendSpy Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Tffa657documentTb4b4b4.Te6edf3headTb4b4b4, Ta5d6ff"appendChild"Tb4b4b4)Tb4b4b4.Te6edf3mockImplementationTb4b4b4(Tb4b4b4(Te6edf3nodeTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3nodeTff7b72?Tb4b4b4.Te6edf3tagName Tff7b72=== Ta5d6ff"SCRIPT" Tff7b72&& Tff7b72typeof Te6edf3nodeTb4b4b4.Te6edf3onload Tff7b72=== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Te6edf3queueMicrotaskTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3nodeTb4b4b4.Te6edf3onloadTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3nodeTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

T8b949e// Mock crypto.subtle.digest to return hash matching embedded SRI for test data
T8b949e// Use embedded hashes if available, otherwise generate deterministic mock hashes
Tff7b72const Te6edf3embeddedWasmHash Tff7b72= Te6edf3__MICRON_WASM_SRI_WASM__Tff7b72?Tb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff"sha384-"Tb4b4b4, Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3embeddedExecHash Tff7b72= Te6edf3__MICRON_WASM_SRI_EXEC__Tff7b72?Tb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff"sha384-"Tb4b4b4, Ta5d6ff""Tb4b4b4)Tb4b4b4;

T8b949e// Create deterministic 48-byte mock hashes (SHA-384 output size) if embedded not available or empty
Tff7b72const Te6edf3mockWasmHash Tff7b72=
Te6edf3embeddedWasmHash Tff7b72&& Te6edf3embeddedWasmHashTb4b4b4.Te6edf3length Tff7b72> T79c0ff0
Tff7b72? Te6edf3embeddedWasmHash
Tff7b72: Ta5d6ff"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"Tb4b4b4;
Tff7b72const Te6edf3mockExecHash Tff7b72=
Te6edf3embeddedExecHash Tff7b72&& Te6edf3embeddedExecHashTb4b4b4.Te6edf3length Tff7b72> T79c0ff0
Tff7b72? Te6edf3embeddedExecHash
Tff7b72: Ta5d6ff"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"Tb4b4b4;

Te6edf3viTb4b4b4.Te6edf3stubGlobalTb4b4b4(Ta5d6ff"crypto"Tb4b4b4, Tb4b4b4{
Te6edf3subtleTff7b72: Tb4b4b4{
Te6edf3digestTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tff7b72async Tb4b4b4(Te6edf3algoTb4b4b4, Te6edf3bufTb4b4b4) Tb4b4b4=> Tb4b4b4{
T8b949e// Return different hash based on buffer size to distinguish wasm_exec.js vs wasm
Tff7b72const Te6edf3hashB64 Tff7b72= Te6edf3bufTb4b4b4.Te6edf3byteLength Tff7b72< T79c0ff1000 Tff7b72? Te6edf3mockExecHash Tff7b72: Te6edf3mockWasmHashTb4b4b4;
T8b949e// Convert base64 to ArrayBuffer (48 bytes for SHA-384)
Tff7b72const Te6edf3binary Tff7b72= Te6edf3atobTb4b4b4(Te6edf3hashB64Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3bytes Tff7b72= Tff7b72new Tffa657Uint8ArrayTb4b4b4(Te6edf3binaryTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3binaryTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Te6edf3bytesTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3binaryTb4b4b4.Te6edf3charCodeAtTb4b4b4(Te6edf3iTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3bytesTb4b4b4.Te6edf3bufferTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Tffa657globalThisTb4b4b4, Ta5d6ff"fetch"Tb4b4b4)Tb4b4b4.Te6edf3mockImplementationTb4b4b4(Te6edf3mockMicronWasmFetchTb4b4b4(Te6edf3mockExecHashTb4b4b4, Te6edf3mockWasmHashTb4b4b4)Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3streaming Tff7b72= Te6edf3vi
Tb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3WebAssemblyTb4b4b4, Ta5d6ff"instantiateStreaming"Tb4b4b4)
Tb4b4b4.Te6edf3mockRejectedValueTb4b4b4(Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"streaming failed"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3instantiate Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3WebAssemblyTb4b4b4, Ta5d6ff"instantiate"Tb4b4b4)Tb4b4b4.Te6edf3mockRejectedValueTb4b4b4(Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"bad wasm"Tb4b4b4)Tb4b4b4)Tb4b4b4;

Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3ok Tff7b72= Tff7b72await Te6edf3preloadNomadMicronWasmTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3okTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3streamingTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3instantiateTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Te6edf3appendSpyTb4b4b4.Te6edf3mockRestoreTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3viTb4b4b4.Te6edf3unstubAllGlobalsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"preloadNomadMicronWasm can retry after invalidateNomadMicronWasmPreload"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tffa657globalThisTb4b4b4.Te6edf3__MESHCHATX_TEST_MICRON_WASM_BUNDLED__ Tff7b72= Tff7b72trueTb4b4b4;
Tffa657globalThisTb4b4b4.Te6edf3Go Tff7b72= Tff7b72class Tb4b4b4{
Tff7b72constructorTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3importObject Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3run Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4;

Tff7b72const Te6edf3appendSpy Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Tffa657documentTb4b4b4.Te6edf3headTb4b4b4, Ta5d6ff"appendChild"Tb4b4b4)Tb4b4b4.Te6edf3mockImplementationTb4b4b4(Tb4b4b4(Te6edf3nodeTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3nodeTff7b72?Tb4b4b4.Te6edf3tagName Tff7b72=== Ta5d6ff"SCRIPT" Tff7b72&& Tff7b72typeof Te6edf3nodeTb4b4b4.Te6edf3onload Tff7b72=== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Te6edf3queueMicrotaskTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3nodeTb4b4b4.Te6edf3onloadTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3nodeTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

T8b949e// Mock crypto.subtle.digest to return hash matching embedded SRI for test data
Tff7b72const Te6edf3embeddedWasmHash Tff7b72= Te6edf3__MICRON_WASM_SRI_WASM__Tff7b72?Tb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff"sha384-"Tb4b4b4, Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3embeddedExecHash Tff7b72= Te6edf3__MICRON_WASM_SRI_EXEC__Tff7b72?Tb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff"sha384-"Tb4b4b4, Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3mockWasmHash Tff7b72=
Te6edf3embeddedWasmHash Tff7b72&& Te6edf3embeddedWasmHashTb4b4b4.Te6edf3length Tff7b72> T79c0ff0
Tff7b72? Te6edf3embeddedWasmHash
Tff7b72: Ta5d6ff"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"Tb4b4b4;
Tff7b72const Te6edf3mockExecHash Tff7b72=
Te6edf3embeddedExecHash Tff7b72&& Te6edf3embeddedExecHashTb4b4b4.Te6edf3length Tff7b72> T79c0ff0
Tff7b72? Te6edf3embeddedExecHash
Tff7b72: Ta5d6ff"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"Tb4b4b4;

Te6edf3viTb4b4b4.Te6edf3stubGlobalTb4b4b4(Ta5d6ff"crypto"Tb4b4b4, Tb4b4b4{
Te6edf3subtleTff7b72: Tb4b4b4{
Te6edf3digestTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tff7b72async Tb4b4b4(Te6edf3algoTb4b4b4, Te6edf3bufTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3hashB64 Tff7b72= Te6edf3bufTb4b4b4.Te6edf3byteLength Tff7b72< T79c0ff1000 Tff7b72? Te6edf3mockExecHash Tff7b72: Te6edf3mockWasmHashTb4b4b4;
Tff7b72const Te6edf3binary Tff7b72= Te6edf3atobTb4b4b4(Te6edf3hashB64Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3bytes Tff7b72= Tff7b72new Tffa657Uint8ArrayTb4b4b4(Te6edf3binaryTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3binaryTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Te6edf3bytesTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3binaryTb4b4b4.Te6edf3charCodeAtTb4b4b4(Te6edf3iTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3bytesTb4b4b4.Te6edf3bufferTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Tffa657globalThisTb4b4b4, Ta5d6ff"fetch"Tb4b4b4)Tb4b4b4.Te6edf3mockImplementationTb4b4b4(Te6edf3mockMicronWasmFetchTb4b4b4(Te6edf3mockExecHashTb4b4b4, Te6edf3mockWasmHashTb4b4b4)Tb4b4b4)Tb4b4b4;

Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3WebAssemblyTb4b4b4, Ta5d6ff"instantiateStreaming"Tb4b4b4)Tb4b4b4.Te6edf3mockRejectedValueTb4b4b4(Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"streaming failed"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3instantiate Tff7b72= Te6edf3vi
Tb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3WebAssemblyTb4b4b4, Ta5d6ff"instantiate"Tb4b4b4)
Tb4b4b4.Te6edf3mockRejectedValueOnceTb4b4b4(Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"first"Tb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3mockRejectedValueOnceTb4b4b4(Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"second"Tb4b4b4)Tb4b4b4)Tb4b4b4;

Tff7b72try Tb4b4b4{
Te6edf3expectTb4b4b4(Tff7b72await Te6edf3preloadNomadMicronWasmTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3invalidateNomadMicronWasmPreloadTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657globalThisTb4b4b4.Te6edf3Go Tff7b72= Tff7b72class Tb4b4b4{
Tff7b72constructorTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3importObject Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3run Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4;
Te6edf3expectTb4b4b4(Tff7b72await Te6edf3preloadNomadMicronWasmTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3instantiateTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTimesTb4b4b4(T79c0ff2Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Te6edf3appendSpyTb4b4b4.Te6edf3mockRestoreTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3viTb4b4b4.Te6edf3unstubAllGlobalsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"preloadNomadMicronWasm resolves true when micronConvert is already defined"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tffa657globalThisTb4b4b4.Te6edf3__MESHCHATX_TEST_MICRON_WASM_BUNDLED__ Tff7b72= Tff7b72trueTb4b4b4;
Tffa657globalThisTb4b4b4.Te6edf3micronConvert Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Ta5d6ff""Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tff7b72await Te6edf3preloadNomadMicronWasmTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────